package com.erp.controller;

import com.erp.annotation.Permission;
import com.erp.dto.CountResult;
import com.erp.pojo.Customer;
import com.erp.service.CustomerService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.List;
import java.util.Map;


@RestController
@CrossOrigin
public class CustomerController {
    //注入service
    @Autowired
    private CustomerService customerService;

    /*处理客户信息添加请求*/
    @Permission(role ="客户管理员")
    @PostMapping("/saveCust")
    public Map<String,Object> saveCustomer(@Validated @RequestBody Customer customer){
        System.out.println(customer);
        Map<String,Object> result=new HashMap<>();
        try{

            customerService.asyncSave(customer);
            result.put("code",200);
            result.put("msg","客户信息录入成功.....");
        } catch (Exception ex){
            ex.printStackTrace();
            result.put("code", 500);
            result.put("msg", "服务器内部错误：" + ex.getMessage());
        }

        return result;
    }
    /*处理客户信息分页查询请求*/
    @Permission(role ="客户管理员")
    @GetMapping("/listCust")
    //分页逻辑：在 CustomerServiceImpl 中，使用 MyBatis-Plus 的 Page 对象和 selectList 方法实现分页查询。
    //根据传入的 pageNum 和 pageSize，返回对应的分页数据。
    //返回结果：返回一个包含 custList 和 total 的 Map 对象，表示客户列表和总记录数。
    public Map<String,Object> queryCustList(
        @RequestParam(defaultValue = "1") Integer pageNum,
        @RequestParam(defaultValue = "3") Integer pageSize){
        return customerService.queryCustListService(pageNum,pageSize);
    }
    /*添加方法处理客户信息修改请求*/
    @Permission(role ="客户管理员")
    @PostMapping("/updateCust")
//接口定义：在 CustomerController 中定义了 @PostMapping("/updateCust") 方法，用于处理修改客户的请求。
//数据更新：通过 @RequestBody 接收前端发送的 Customer 对象。
//更新数据库：调用 customerService.updateById(customer) 方法，根据客户 ID 更新数据库中的记录。
//返回结果：返回一个包含 code 和 msg 的 Map 对象，表示操作是否成功。
    public Map<String,Object> updateCustomer(@RequestBody Customer customer){
        Map<String,Object> result=new HashMap<>();
        result.put("code",400);
        result.put("msg","操作失败.....");
        try {
            customerService.updateById(customer);
            result.put("code",200);
            result.put("msg","客户信息修改成功.....");
        }catch (Exception ex){
            ex.printStackTrace();
        }
        return result;
    }
    /*处理客户信息删除的ajax请求*/
    @Permission(role ="客户管理员")
    @GetMapping("/delCust")
    //接口定义：在 CustomerController 中定义了 @GetMapping("/delCust") 方法，用于处理删除客户的请求。
    //删除逻辑：根据传入的客户 ID，调用 customerService.removeById(id) 方法，从数据库中删除对应的客户记录。
    //返回结果：返回一个包含 code 和 msg 的 Map 对象，表示操作是否成功。
    public Map<String,Object> delCust(Integer id){
        Map<String,Object> result=new HashMap<>();
        result.put("code",400);
        result.put("msg","操作失败.....");
        try {
            customerService.removeById(id);
            result.put("code",200);
            result.put("msg","客户信息删除成功.....");
        }catch (Exception ex){
            ex.printStackTrace();
        }
        return result;
    }
    /*处理加载所有客户列表请求*/
    @Permission(role ="统计管理员")
    @GetMapping("/listAllCust")
    public List<Customer> listAllCust(){
        return customerService.queryCustIdNameListService();
    }


    @Permission(role ="统计管理员")
    /*处理客户地区分布统计请求*/
    @GetMapping("/countCust")
    public List<CountResult> countCust(){

        return customerService.countCustService();
    }
}
